package com.poc.train.pr;

import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
import com.bstek.dorado.annotation.DataProvider;
import com.bstek.dorado.annotation.DataResolver;
import com.bstek.dorado.data.entity.EntityState;
import com.bstek.dorado.data.entity.EntityUtils;
import com.bstek.dorado.data.provider.Page;
import com.poc.train.dao.PocUserDao;
import com.poc.train.entity.PocPosition;
import com.poc.train.entity.PocUser;

/**
 * 
 * @author Andy
 * @date 2019年5月8日
 * @desc 岗位维护控制层
 * 
 *       说明：当前为测试类，在当前类中直接执行持久化操作
 *
 */
@Component
public class PositionPR extends HibernateDao {
	
	@Autowired
	private PocUserDao userDao;

	/**
	 * 分页获取岗位列表
	 * 
	 * @param page
	 *            分页参数
	 * @param param
	 *            业务参数
	 * @throws Exception
	 * 
	 * 
	 *             positionPR#pagePosition
	 * 
	 */
	@DataProvider
	public void pagePosition(Page<PocPosition> page, Map<String, Object> param)
			throws Exception {

		String hql = " from " + PocPosition.class.getName();

		String countHql = "select count(*) " + hql;

		this.pagingQuery(page, hql, countHql);

	}

	/**
	 * positionPR#savePosition 保存操作，包括增加，修改，删除
	 * 
	 * @param datas
	 *            前端需要被操作的数据
	 */
	@DataResolver
	public void savePosition(Collection<PocPosition> datas) {
		if (null == datas || datas.isEmpty()) {
			return;
		}
		Session session = this.getSessionFactory().openSession();
		try {
			EntityState state = null;
			for (PocPosition poc : datas) {
				state = EntityUtils.getState(poc);
				if (EntityState.NEW.equals(state)) {
					// 新增
					session.save(poc);
				}
				if (EntityState.MODIFIED.equals(state)) {
					// 修改
					session.update(poc);
				}
				if (EntityState.DELETED.equals(state)) {
					// 删除
					session.delete(poc);
					//删除主表后自动删除相关子信息
					userDao.delUserByPositionId(poc.getId(),session);
				}
				if (EntityState.NONE.equals(state)) {
					// do nothing
				}
				// 单独对字表进行数据过滤和操作
				userDao.saveUsers(poc.getUsers(), session);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			session.flush();
			session.close();
		}

	}

	

}
